package com.explorati.LeetCode007.reverse;

/**
 * @ Author : Weijian_Wang
 * @ Date : Created in 16:17 2020/9/19 0019
 * @ Description ：
 */
public class Solution {
    /**
     * 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。
     * @param x
     * @return
     */
    public int reverse(int x) {
        //当前位：从末尾开始取
        int res = 0;

        while(x != 0) {
            int num = x % 10;
            //32位最大值为2147483647，最小值为-2147483648
            //如果返回值1. 已经大于32位最大值/10了，溢出，返回0；2. 等于32位最大值并且此次的数大于32位最大值的个位，溢出，返回0
            if(res > Integer.MAX_VALUE / 10 || ((res == Integer.MAX_VALUE / 10) && (num > Integer.MAX_VALUE % 10)) ) {
                return 0;
            }
            else if(res < Integer.MIN_VALUE / 10 || ((res == Integer.MIN_VALUE / 10) && (num < Integer.MIN_VALUE % 10))) {
                return 0;
            }
            res = res * 10 + num;
            x = x / 10;
        }

        return res;
    }
}
